From 4e02218f52080421cf40b29c82555ec95f708b40 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 22 Oct 2010 12:41:19 +0200 Subject: [PATCH] Use GdkRGBA all around in GtkStyleContext. --- gtk/gtkcssprovider.c | 27 +++-- gtk/gtksettings.c | 4 +- gtk/gtkstyle.c | 37 ++++-- gtk/gtkstylecontext.c | 2 +- gtk/gtkstylecontext.h | 2 +- gtk/gtkstyleset.c | 26 ++--- gtk/gtkstyleset.h | 2 +- gtk/gtksymboliccolor.c | 39 +++---- gtk/gtksymboliccolor.h | 2 +- gtk/gtkthemingengine.c | 247 ++++++++++++++++++++--------------------- 10 files changed, 205 insertions(+), 183 deletions(-) diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c index 045bd64bc4..0f051141fb 100644 --- a/gtk/gtkcssprovider.c +++ b/gtk/gtkcssprovider.c @@ -279,7 +279,7 @@ * * background-color * color - * #GdkColor + * #GdkRGBA * * * background-color: #fff; @@ -1532,21 +1532,30 @@ symbolic_color_parse_str (const gchar *string, str = (gchar *) string; - if (str[0] == '#') + if (str[0] == '#' || str[0] == 'r') { - GdkColor color; + GdkRGBA color; gchar *color_str; const gchar *end; end = str + 1; - while (g_ascii_isxdigit (*end)) - end++; + if (str[0] == '#') + while (g_ascii_isxdigit (*end)) + end++; + else + { + while (*end != ')' && *end != '\0') + end++; + + if (*end == ')') + end++; + } color_str = g_strndup (str, end - str); *end_ptr = (gchar *) end; - if (!gdk_color_parse (color_str, &color)) + if (!gdk_rgba_parse (&color, color_str)) { g_free (color_str); return NULL; @@ -2205,11 +2214,11 @@ css_provider_parse_value (GtkCssProvider *css_provider, type = G_VALUE_TYPE (value); - if (type == GDK_TYPE_COLOR) + if (type == GDK_TYPE_RGBA) { - GdkColor color; + GdkRGBA color; - if (gdk_color_parse (value_str, &color) == TRUE) + if (gdk_rgba_parse (&color, value_str) == TRUE) g_value_set_boxed (value, &color); else { diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c index 278890908c..d07ce4885b 100644 --- a/gtk/gtksettings.c +++ b/gtk/gtksettings.c @@ -1278,7 +1278,7 @@ gtk_settings_get_style (GtkStyleProvider *provider, { GtkSymbolicColor *color; gchar *name, *pos; - GdkColor col; + GdkRGBA col; if (!*colors[i]) continue; @@ -1297,7 +1297,7 @@ gtk_settings_get_style (GtkStyleProvider *provider, while (*pos == ' ') pos++; - if (!*pos || !gdk_color_parse (pos, &col)) + if (!*pos || !gdk_rgba_parse (&col, pos)) continue; color = gtk_symbolic_color_new_literal (&col); diff --git a/gtk/gtkstyle.c b/gtk/gtkstyle.c index 38390c072f..8ba9e975b2 100644 --- a/gtk/gtkstyle.c +++ b/gtk/gtkstyle.c @@ -642,7 +642,8 @@ set_color (GtkStyle *style, GtkStateType state, GtkRcFlags prop) { - GdkColor *color = NULL; + GdkRGBA *color = NULL; + GdkColor *dest = { 0 }; /* Shut up gcc */ switch (prop) { @@ -650,34 +651,36 @@ set_color (GtkStyle *style, gtk_style_context_get (context, state, "background-color", &color, NULL); - if (color) - style->bg[state] = *color; + dest = &style->bg[state]; break; case GTK_RC_FG: gtk_style_context_get (context, state, "foreground-color", &color, NULL); - if (color) - style->fg[state] = *color; + dest = &style->fg[state]; break; case GTK_RC_TEXT: gtk_style_context_get (context, state, "text-color", &color, NULL); - if (color) - style->text[state] = *color; + dest = &style->text[state]; break; case GTK_RC_BASE: gtk_style_context_get (context, state, "base-color", &color, NULL); - if (color) - style->base[state] = *color; + dest = &style->base[state]; break; } if (color) - gdk_color_free (color); + { + dest->pixel = 0; + dest->red = CLAMP ((guint) (color->red * 65535), 0, 65535); + dest->green = CLAMP ((guint) (color->green * 65535), 0, 65535); + dest->blue = CLAMP ((guint) (color->blue * 65535), 0, 65535); + gdk_rgba_free (color); + } } static void @@ -973,6 +976,8 @@ gtk_style_lookup_color (GtkStyle *style, GdkColor *color) { GtkStylePrivate *priv; + gboolean result; + GdkRGBA rgba; g_return_val_if_fail (GTK_IS_STYLE (style), FALSE); g_return_val_if_fail (color_name != NULL, FALSE); @@ -983,7 +988,17 @@ gtk_style_lookup_color (GtkStyle *style, if (!priv->context) return FALSE; - return gtk_style_context_lookup_color (priv->context, color_name, color); + result = gtk_style_context_lookup_color (priv->context, color_name, &rgba); + + if (color) + { + color->red = (guint16) (rgba.red * 65535); + color->green = (guint16) (rgba.green * 65535); + color->blue = (guint16) (rgba.blue * 65535); + color->pixel = 0; + } + + return result; } /** diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c index 284f8521a9..602a83d126 100644 --- a/gtk/gtkstylecontext.c +++ b/gtk/gtkstylecontext.c @@ -2376,7 +2376,7 @@ gtk_style_context_get_junction_sides (GtkStyleContext *context) gboolean gtk_style_context_lookup_color (GtkStyleContext *context, const gchar *color_name, - GdkColor *color) + GdkRGBA *color) { GtkStyleContextPrivate *priv; GtkSymbolicColor *sym_color; diff --git a/gtk/gtkstylecontext.h b/gtk/gtkstylecontext.h index 574beddf20..212de85558 100644 --- a/gtk/gtkstylecontext.h +++ b/gtk/gtkstylecontext.h @@ -137,7 +137,7 @@ GtkJunctionSides gtk_style_context_get_junction_sides (GtkStyleContext *context gboolean gtk_style_context_lookup_color (GtkStyleContext *context, const gchar *color_name, - GdkColor *color); + GdkRGBA *color); void gtk_style_context_notify_state_change (GtkStyleContext *context, GdkWindow *window, diff --git a/gtk/gtkstyleset.c b/gtk/gtkstyleset.c index a53a75c314..94a4136629 100644 --- a/gtk/gtkstyleset.c +++ b/gtk/gtkstyleset.c @@ -81,10 +81,10 @@ gtk_style_set_class_init (GtkStyleSetClass *klass) object_class->finalize = gtk_style_set_finalize; /* Initialize default property set */ - gtk_style_set_register_property ("foreground-color", GDK_TYPE_COLOR, NULL, NULL); - gtk_style_set_register_property ("background-color", GDK_TYPE_COLOR, NULL, NULL); - gtk_style_set_register_property ("text-color", GDK_TYPE_COLOR, NULL, NULL); - gtk_style_set_register_property ("base-color", GDK_TYPE_COLOR, NULL, NULL); + gtk_style_set_register_property ("foreground-color", GDK_TYPE_RGBA, NULL, NULL); + gtk_style_set_register_property ("background-color", GDK_TYPE_RGBA, NULL, NULL); + gtk_style_set_register_property ("text-color", GDK_TYPE_RGBA, NULL, NULL); + gtk_style_set_register_property ("base-color", GDK_TYPE_RGBA, NULL, NULL); gtk_style_set_register_property ("font", PANGO_TYPE_FONT_DESCRIPTION, NULL, NULL); @@ -94,7 +94,7 @@ gtk_style_set_class_init (GtkStyleSetClass *klass) gtk_style_set_register_property ("border-width", G_TYPE_INT, NULL, NULL); gtk_style_set_register_property ("border-radius", G_TYPE_INT, NULL, NULL); gtk_style_set_register_property ("border-style", GTK_TYPE_BORDER_STYLE, NULL, NULL); - gtk_style_set_register_property ("border-color", GDK_TYPE_COLOR, NULL, NULL); + gtk_style_set_register_property ("border-color", GDK_TYPE_RGBA, NULL, NULL); gtk_style_set_register_property ("background-image", CAIRO_GOBJECT_TYPE_PATTERN, NULL, NULL); gtk_style_set_register_property ("border-image", GTK_TYPE_9SLICE, NULL, NULL); @@ -572,10 +572,10 @@ gtk_style_set_set_property (GtkStyleSet *set, return; } - if (node->property_type == GDK_TYPE_COLOR) + if (node->property_type == GDK_TYPE_RGBA) { /* Allow GtkSymbolicColor as well */ - g_return_if_fail (value_type == GDK_TYPE_COLOR || value_type == GTK_TYPE_SYMBOLIC_COLOR); + g_return_if_fail (value_type == GDK_TYPE_RGBA || value_type == GTK_TYPE_SYMBOLIC_COLOR); } else if (node->property_type == CAIRO_GOBJECT_TYPE_PATTERN) { @@ -710,15 +710,15 @@ static gboolean resolve_color (GtkStyleSet *set, GValue *value) { - GdkColor color; + GdkRGBA color; - /* Resolve symbolic color to GdkColor */ + /* Resolve symbolic color to GdkRGBA */ if (!gtk_symbolic_color_resolve (g_value_get_boxed (value), set, &color)) return FALSE; - /* Store it back, this is where GdkColor caching happens */ + /* Store it back, this is where GdkRGBA caching happens */ g_value_unset (value); - g_value_init (value, GDK_TYPE_COLOR); + g_value_init (value, GDK_TYPE_RGBA); g_value_set_boxed (value, &color); return TRUE; @@ -796,7 +796,7 @@ gtk_style_set_get_property (GtkStyleSet *set, if (G_VALUE_TYPE (val) == GTK_TYPE_SYMBOLIC_COLOR) { - g_return_val_if_fail (node->property_type == GDK_TYPE_COLOR, FALSE); + g_return_val_if_fail (node->property_type == GDK_TYPE_RGBA, FALSE); if (!resolve_color (set, val)) return FALSE; @@ -863,7 +863,7 @@ gtk_style_set_get_valist (GtkStyleSet *set, if (G_VALUE_TYPE (val) == GTK_TYPE_SYMBOLIC_COLOR) { - g_return_if_fail (node->property_type == GDK_TYPE_COLOR); + g_return_if_fail (node->property_type == GDK_TYPE_RGBA); if (!resolve_color (set, val)) val = &node->default_value; diff --git a/gtk/gtkstyleset.h b/gtk/gtkstyleset.h index f19ce16041..60544ad583 100644 --- a/gtk/gtkstyleset.h +++ b/gtk/gtkstyleset.h @@ -105,7 +105,7 @@ void gtk_style_set_merge (GtkStyleSet *set, gboolean gtk_symbolic_color_resolve (GtkSymbolicColor *color, GtkStyleSet *style_set, - GdkColor *resolved_color); + GdkRGBA *resolved_color); gboolean gtk_gradient_resolve (GtkGradient *gradient, GtkStyleSet *style_set, cairo_pattern_t **resolved_gradient); diff --git a/gtk/gtksymboliccolor.c b/gtk/gtksymboliccolor.c index e803c2e1e7..25af2c33ce 100644 --- a/gtk/gtksymboliccolor.c +++ b/gtk/gtksymboliccolor.c @@ -42,7 +42,7 @@ struct _GtkSymbolicColor union { - GdkColor color; + GdkRGBA color; gchar *name; struct @@ -84,7 +84,7 @@ struct _GtkGradient /** * gtk_symbolic_color_new_literal: - * @color: a #GdkColor + * @color: a #GdkRGBA * * Creates a symbolic color pointing to a literal color. * @@ -93,7 +93,7 @@ struct _GtkGradient * Since: 3.0 **/ GtkSymbolicColor * -gtk_symbolic_color_new_literal (GdkColor *color) +gtk_symbolic_color_new_literal (GdkRGBA *color) { GtkSymbolicColor *symbolic_color; @@ -273,9 +273,9 @@ gtk_symbolic_color_unref (GtkSymbolicColor *color) * Since: 3.0 **/ gboolean -gtk_symbolic_color_resolve (GtkSymbolicColor *color, - GtkStyleSet *style_set, - GdkColor *resolved_color) +gtk_symbolic_color_resolve (GtkSymbolicColor *color, + GtkStyleSet *style_set, + GdkRGBA *resolved_color) { g_return_val_if_fail (color != NULL, FALSE); g_return_val_if_fail (GTK_IS_STYLE_SET (style_set), FALSE); @@ -301,14 +301,15 @@ gtk_symbolic_color_resolve (GtkSymbolicColor *color, break; case COLOR_TYPE_SHADE: { - GdkColor shade; + GdkRGBA shade; if (!gtk_symbolic_color_resolve (color->shade.color, style_set, &shade)) return FALSE; - resolved_color->red = CLAMP (shade.red * color->shade.factor, 0, 65535); - resolved_color->green = CLAMP (shade.green * color->shade.factor, 0, 65535); - resolved_color->blue = CLAMP (shade.blue * color->shade.factor, 0, 65535); + resolved_color->red = CLAMP (shade.red * color->shade.factor, 0, 1); + resolved_color->green = CLAMP (shade.green * color->shade.factor, 0, 1); + resolved_color->blue = CLAMP (shade.blue * color->shade.factor, 0, 1); + resolved_color->alpha = CLAMP (shade.alpha * color->shade.factor, 0, 1); return TRUE; } @@ -316,7 +317,7 @@ gtk_symbolic_color_resolve (GtkSymbolicColor *color, break; case COLOR_TYPE_MIX: { - GdkColor color1, color2; + GdkRGBA color1, color2; if (!gtk_symbolic_color_resolve (color->mix.color1, style_set, &color1)) return FALSE; @@ -324,9 +325,10 @@ gtk_symbolic_color_resolve (GtkSymbolicColor *color, if (!gtk_symbolic_color_resolve (color->mix.color2, style_set, &color2)) return FALSE; - resolved_color->red = CLAMP (color1.red + ((color2.red - color1.red) * color->mix.factor), 0, 65535); - resolved_color->green = CLAMP (color1.green + ((color2.green - color1.green) * color->mix.factor), 0, 65535); - resolved_color->blue = CLAMP (color1.blue + ((color2.blue - color1.blue) * color->mix.factor), 0, 65535); + resolved_color->red = CLAMP (color1.red + ((color2.red - color1.red) * color->mix.factor), 0, 1); + resolved_color->green = CLAMP (color1.green + ((color2.green - color1.green) * color->mix.factor), 0, 1); + resolved_color->blue = CLAMP (color1.blue + ((color2.blue - color1.blue) * color->mix.factor), 0, 1); + resolved_color->alpha = CLAMP (color1.alpha + ((color2.alpha - color1.alpha) * color->mix.factor), 0, 1); return TRUE; } @@ -537,7 +539,7 @@ gtk_gradient_resolve (GtkGradient *gradient, for (i = 0; i < gradient->stops->len; i++) { ColorStop *stop; - GdkColor color; + GdkRGBA color; stop = &g_array_index (gradient->stops, ColorStop, i); @@ -547,10 +549,9 @@ gtk_gradient_resolve (GtkGradient *gradient, return FALSE; } - cairo_pattern_add_color_stop_rgb (pattern, stop->offset, - color.red / 65535., - color.green / 65535., - color.blue / 65535.); + cairo_pattern_add_color_stop_rgba (pattern, stop->offset, + color.red, color.green, + color.blue, color.alpha); } *resolved_gradient = pattern; diff --git a/gtk/gtksymboliccolor.h b/gtk/gtksymboliccolor.h index e326992a33..ce1d3c6fdc 100644 --- a/gtk/gtksymboliccolor.h +++ b/gtk/gtksymboliccolor.h @@ -34,7 +34,7 @@ typedef struct _GtkGradient GtkGradient; GType gtk_symbolic_color_get_type (void) G_GNUC_CONST; GType gtk_gradient_get_type (void) G_GNUC_CONST; -GtkSymbolicColor * gtk_symbolic_color_new_literal (GdkColor *color); +GtkSymbolicColor * gtk_symbolic_color_new_literal (GdkRGBA *color); GtkSymbolicColor * gtk_symbolic_color_new_name (const gchar *name); GtkSymbolicColor * gtk_symbolic_color_new_shade (GtkSymbolicColor *color, gdouble factor); diff --git a/gtk/gtkthemingengine.c b/gtk/gtkthemingengine.c index b7e101bbd0..61433ad1e6 100644 --- a/gtk/gtkthemingengine.c +++ b/gtk/gtkthemingengine.c @@ -758,7 +758,7 @@ gtk_theming_engine_render_check (GtkThemingEngine *engine, gdouble width, gdouble height) { - GdkColor *fg_color, *base_color, *text_color; + GdkRGBA *fg_color, *base_color, *text_color; const GtkWidgetPath *path; GtkStateFlags flags; gint exterior_size, interior_size, thickness, pad; @@ -797,21 +797,21 @@ gtk_theming_engine_render_check (GtkThemingEngine *engine, cairo_set_line_width (cr, 1.0); cairo_rectangle (cr, x + 0.5, y + 0.5, exterior_size - 1, exterior_size - 1); - gdk_cairo_set_source_color (cr, base_color); + gdk_cairo_set_source_rgba (cr, base_color); cairo_fill_preserve (cr); if (gtk_theming_engine_has_class (engine, "cell")) - gdk_cairo_set_source_color (cr, text_color); + gdk_cairo_set_source_rgba (cr, text_color); else - gdk_cairo_set_source_color (cr, fg_color); + gdk_cairo_set_source_rgba (cr, fg_color); cairo_stroke (cr); } if (gtk_theming_engine_has_class (engine, "menu")) - gdk_cairo_set_source_color (cr, fg_color); + gdk_cairo_set_source_rgba (cr, fg_color); else - gdk_cairo_set_source_color (cr, text_color); + gdk_cairo_set_source_rgba (cr, text_color); if (flags & GTK_STATE_FLAG_INCONSISTENT) { @@ -869,9 +869,9 @@ gtk_theming_engine_render_check (GtkThemingEngine *engine, cairo_restore (cr); - gdk_color_free (fg_color); - gdk_color_free (base_color); - gdk_color_free (text_color); + gdk_rgba_free (fg_color); + gdk_rgba_free (base_color); + gdk_rgba_free (text_color); } static void @@ -883,7 +883,7 @@ gtk_theming_engine_render_option (GtkThemingEngine *engine, gdouble height) { GtkStateFlags flags; - GdkColor *base_color, *fg_color, *text_color; + GdkRGBA *base_color, *fg_color, *text_color; const GtkWidgetPath *path; gint exterior_size, interior_size, pad, thickness; gdouble radius; @@ -910,7 +910,7 @@ gtk_theming_engine_render_option (GtkThemingEngine *engine, if (!gtk_theming_engine_has_class (engine, "menu")) { - gdk_cairo_set_source_color (cr, base_color); + gdk_cairo_set_source_rgba (cr, base_color); cairo_arc (cr, x + exterior_size / 2., @@ -921,18 +921,18 @@ gtk_theming_engine_render_option (GtkThemingEngine *engine, cairo_fill_preserve (cr); if (gtk_theming_engine_has_class (engine, "cell")) - gdk_cairo_set_source_color (cr, text_color); + gdk_cairo_set_source_rgba (cr, text_color); else - gdk_cairo_set_source_color (cr, fg_color); + gdk_cairo_set_source_rgba (cr, fg_color); cairo_set_line_width (cr, 1.); cairo_stroke (cr); } if (gtk_theming_engine_has_class (engine, "menu")) - gdk_cairo_set_source_color (cr, fg_color); + gdk_cairo_set_source_rgba (cr, fg_color); else - gdk_cairo_set_source_color (cr, text_color); + gdk_cairo_set_source_rgba (cr, text_color); /* FIXME: thickness */ thickness = 1; @@ -980,9 +980,9 @@ gtk_theming_engine_render_option (GtkThemingEngine *engine, cairo_restore (cr); - gdk_color_free (fg_color); - gdk_color_free (base_color); - gdk_color_free (text_color); + gdk_rgba_free (fg_color); + gdk_rgba_free (base_color); + gdk_rgba_free (text_color); } static void @@ -1014,7 +1014,7 @@ gtk_theming_engine_render_arrow (GtkThemingEngine *engine, gdouble size) { GtkStateFlags flags; - GdkColor *fg_color; + GdkRGBA *fg_color; cairo_save (cr); @@ -1032,12 +1032,12 @@ gtk_theming_engine_render_arrow (GtkThemingEngine *engine, } add_path_arrow (cr, angle, x, y, size); - gdk_cairo_set_source_color (cr, fg_color); + gdk_cairo_set_source_rgba (cr, fg_color); cairo_fill (cr); cairo_restore (cr); - gdk_color_free (fg_color); + gdk_rgba_free (fg_color); } static void @@ -1130,13 +1130,14 @@ add_path_gap_side (cairo_t *cr, } static void -color_shade (const GdkColor *color, - gdouble factor, - GdkColor *color_return) +color_shade (const GdkRGBA *color, + gdouble factor, + GdkRGBA *color_return) { - color_return->red = CLAMP (color->red * factor, 0, 65535); - color_return->green = CLAMP (color->green * factor, 0, 65535); - color_return->blue = CLAMP (color->blue * factor, 0, 65535); + color_return->red = CLAMP (color->red * factor, 0, 1); + color_return->green = CLAMP (color->green * factor, 0, 1); + color_return->blue = CLAMP (color->blue * factor, 0, 1); + color_return->alpha = CLAMP (color->alpha * factor, 0, 1); } static void @@ -1242,7 +1243,7 @@ gtk_theming_engine_render_background (GtkThemingEngine *engine, gdouble width, gdouble height) { - GdkColor *bg_color, *base_color; + GdkRGBA *bg_color, *base_color; cairo_pattern_t *pattern; GtkStateFlags flags; gboolean running; @@ -1284,7 +1285,7 @@ gtk_theming_engine_render_background (GtkThemingEngine *engine, { cairo_pattern_t *other_pattern; GtkStateFlags other_flags; - GdkColor *other_bg, *other_base; + GdkRGBA *other_bg, *other_base; cairo_pattern_t *new_pattern = NULL; if (flags & GTK_STATE_FLAG_PRELIGHT) @@ -1384,10 +1385,8 @@ gtk_theming_engine_render_background (GtkThemingEngine *engine, else if (pattern || other_pattern) { cairo_pattern_t *p; - GdkColor *c; + GdkRGBA *c; gdouble x0, y0, x1, y1, r0, r1; - gdouble red0, green0, blue0; - gdouble red1, green1, blue1; gint n, i; /* Blend a pattern with a color */ @@ -1416,28 +1415,25 @@ gtk_theming_engine_render_background (GtkThemingEngine *engine, cairo_pattern_get_color_stop_count (p, &n); - red0 = c->red / 65535.; - green0 = c->green / 65535.; - blue0 = c->blue / 65535.; - for (i = 0; i < n; i++) { - gdouble offset, alpha; + gdouble red1, green1, blue1, alpha1; + gdouble offset; cairo_pattern_get_color_stop_rgba (p, i, &offset, &red1, &green1, &blue1, - &alpha); + &alpha1); cairo_pattern_add_color_stop_rgba (new_pattern, offset, - red0 + ((red1 - red0) * progress), - green0 + ((green1 - green0) * progress), - blue0 + ((blue1 - blue0) * progress), - alpha + ((1 - alpha) * progress)); + c->red + ((red1 - c->red) * progress), + c->green + ((green1 - c->green) * progress), + c->blue + ((blue1 - c->blue) * progress), + c->alpha + ((alpha1 - c->alpha) * progress)); } } else { - const GdkColor *color, *other_color; + const GdkRGBA *color, *other_color; /* Merge just colors */ if (gtk_theming_engine_has_class (engine, "entry")) @@ -1451,9 +1447,10 @@ gtk_theming_engine_render_background (GtkThemingEngine *engine, other_color = other_bg; } - new_pattern = cairo_pattern_create_rgb ((gdouble) (color->red + ((other_color->red - color->red) * progress)) / 65535., - (gdouble) (color->green + ((other_color->green - color->green) * progress)) / 65535., - (gdouble) (color->blue + ((other_color->blue - color->blue) * progress)) / 65535.); + new_pattern = cairo_pattern_create_rgba (CLAMP (color->red + ((other_color->red - color->red) * progress), 0, 1), + CLAMP (color->green + ((other_color->green - color->green) * progress), 0, 1), + CLAMP (color->blue + ((other_color->blue - color->blue) * progress), 0, 1), + CLAMP (color->alpha + ((other_color->alpha - color->alpha) * progress), 0, 1)); } if (new_pattern) @@ -1467,10 +1464,10 @@ gtk_theming_engine_render_background (GtkThemingEngine *engine, cairo_pattern_destroy (other_pattern); if (other_bg) - gdk_color_free (other_bg); + gdk_rgba_free (other_bg); if (other_base) - gdk_color_free (other_base); + gdk_rgba_free (other_base); } cairo_rectangle (cr, 0, 0, 1, 1); @@ -1483,9 +1480,9 @@ gtk_theming_engine_render_background (GtkThemingEngine *engine, else { if (gtk_theming_engine_has_class (engine, "entry")) - gdk_cairo_set_source_color (cr, base_color); + gdk_cairo_set_source_rgba (cr, base_color); else - gdk_cairo_set_source_color (cr, bg_color); + gdk_cairo_set_source_rgba (cr, bg_color); } if (gtk_theming_engine_has_class (engine, "tooltip")) @@ -1511,8 +1508,8 @@ gtk_theming_engine_render_background (GtkThemingEngine *engine, cairo_restore (cr); - gdk_color_free (base_color); - gdk_color_free (bg_color); + gdk_rgba_free (base_color); + gdk_rgba_free (bg_color); } static void @@ -1524,8 +1521,8 @@ gtk_theming_engine_render_frame (GtkThemingEngine *engine, gdouble height) { GtkStateFlags flags; - GdkColor lighter, darker; - GdkColor *border_color; + GdkRGBA lighter, darker; + GdkRGBA *border_color; Gtk9Slice *slice; GtkBorderStyle border_style; gint border_width, radius; @@ -1571,7 +1568,7 @@ gtk_theming_engine_render_frame (GtkThemingEngine *engine, _cairo_round_rectangle_sides (cr, (gdouble) radius, x, y, width, height, SIDE_ALL, junction); - gdk_cairo_set_source_color (cr, border_color); + gdk_cairo_set_source_rgba (cr, border_color); cairo_stroke (cr); break; @@ -1592,18 +1589,18 @@ gtk_theming_engine_render_frame (GtkThemingEngine *engine, } if (border_style == GTK_BORDER_STYLE_INSET) - gdk_cairo_set_source_color (cr, border_color); + gdk_cairo_set_source_rgba (cr, border_color); else - gdk_cairo_set_source_color (cr, &darker); + gdk_cairo_set_source_rgba (cr, &darker); _cairo_round_rectangle_sides (cr, (gdouble) radius, x, y, width, height, SIDE_BOTTOM | SIDE_RIGHT, junction); cairo_stroke (cr); if (border_style == GTK_BORDER_STYLE_INSET) - gdk_cairo_set_source_color (cr, &darker); + gdk_cairo_set_source_rgba (cr, &darker); else - gdk_cairo_set_source_color (cr, border_color); + gdk_cairo_set_source_rgba (cr, border_color); _cairo_round_rectangle_sides (cr, (gdouble) radius, x, y, width, height, SIDE_TOP | SIDE_LEFT, junction); @@ -1616,7 +1613,7 @@ gtk_theming_engine_render_frame (GtkThemingEngine *engine, } if (border_color) - gdk_color_free (border_color); + gdk_rgba_free (border_color); } static void @@ -1628,7 +1625,7 @@ gtk_theming_engine_render_expander (GtkThemingEngine *engine, gdouble height) { GtkStateFlags flags; - GdkColor *bg_color, *fg_color, *base_color; + GdkRGBA *bg_color, *fg_color, *base_color; double vertical_overshoot; int diameter; double radius; @@ -1712,20 +1709,20 @@ gtk_theming_engine_render_expander (GtkThemingEngine *engine, cairo_set_line_width (cr, line_width); if (flags & GTK_STATE_FLAG_PRELIGHT) - gdk_cairo_set_source_color (cr, fg_color); + gdk_cairo_set_source_rgba (cr, fg_color); else - gdk_cairo_set_source_color (cr, base_color); + gdk_cairo_set_source_rgba (cr, base_color); cairo_fill_preserve (cr); - gdk_cairo_set_source_color (cr, fg_color); + gdk_cairo_set_source_rgba (cr, fg_color); cairo_stroke (cr); cairo_restore (cr); - gdk_color_free (base_color); - gdk_color_free (fg_color); - gdk_color_free (bg_color); + gdk_rgba_free (base_color); + gdk_rgba_free (fg_color); + gdk_rgba_free (bg_color); } static void @@ -1737,7 +1734,7 @@ gtk_theming_engine_render_focus (GtkThemingEngine *engine, gdouble height) { GtkStateFlags flags; - GdkColor *color; + GdkRGBA *color; gint line_width; gint8 *dash_list; @@ -1789,12 +1786,12 @@ gtk_theming_engine_render_focus (GtkThemingEngine *engine, width - line_width, height - line_width); - gdk_cairo_set_source_color (cr, color); + gdk_cairo_set_source_rgba (cr, color); cairo_stroke (cr); cairo_restore (cr); - gdk_color_free (color); + gdk_rgba_free (color); g_free (dash_list); } @@ -1806,7 +1803,7 @@ gtk_theming_engine_render_line (GtkThemingEngine *engine, gdouble x1, gdouble y1) { - GdkColor *bg_color, darker, lighter; + GdkRGBA *bg_color, darker, lighter; GtkStateFlags flags; gint i, thickness, thickness_dark, thickness_light, len; cairo_matrix_t matrix; @@ -1847,11 +1844,11 @@ gtk_theming_engine_render_line (GtkThemingEngine *engine, for (i = 0; i < thickness_dark; i++) { - gdk_cairo_set_source_color (cr, &lighter); + gdk_cairo_set_source_rgba (cr, &lighter); add_path_line (cr, len - i - 1.5, y0, len - 0.5, y0); cairo_stroke (cr); - gdk_cairo_set_source_color (cr, &darker); + gdk_cairo_set_source_rgba (cr, &darker); add_path_line (cr, 0.5, y0, len - i - 1.5, y0); cairo_stroke (cr); @@ -1860,11 +1857,11 @@ gtk_theming_engine_render_line (GtkThemingEngine *engine, for (i = 0; i < thickness_light; i++) { - gdk_cairo_set_source_color (cr, &darker); + gdk_cairo_set_source_rgba (cr, &darker); add_path_line (cr, 0.5, y0, thickness_light - i + 0.5, y0); cairo_stroke (cr); - gdk_cairo_set_source_color (cr, &lighter); + gdk_cairo_set_source_rgba (cr, &lighter); add_path_line (cr, thickness_light - i + 0.5, y0, len - 0.5, y0); cairo_stroke (cr); @@ -1873,7 +1870,7 @@ gtk_theming_engine_render_line (GtkThemingEngine *engine, cairo_restore (cr); - gdk_color_free (bg_color); + gdk_rgba_free (bg_color); } static void @@ -1884,7 +1881,7 @@ gtk_theming_engine_render_layout (GtkThemingEngine *engine, PangoLayout *layout) { const PangoMatrix *matrix; - GdkColor *fg_color; + GdkRGBA *fg_color; GtkStateFlags flags; GdkScreen *screen; @@ -1931,12 +1928,12 @@ gtk_theming_engine_render_layout (GtkThemingEngine *engine, cairo_restore (cr); } - gdk_cairo_set_source_color (cr, fg_color); + gdk_cairo_set_source_rgba (cr, fg_color); pango_cairo_show_layout (cr, layout); cairo_restore (cr); - gdk_color_free (fg_color); + gdk_rgba_free (fg_color); } static void @@ -1988,8 +1985,8 @@ gtk_theming_engine_render_frame_gap (GtkThemingEngine *engine, gdouble xy1_gap) { GtkStateFlags flags; - GdkColor *bg_color; - GdkColor lighter, darker; + GdkRGBA *bg_color; + GdkRGBA lighter, darker; guint sides; cairo_save (cr); @@ -2012,24 +2009,24 @@ gtk_theming_engine_render_frame_gap (GtkThemingEngine *engine, else sides = SIDE_BOTTOM | SIDE_RIGHT; - gdk_cairo_set_source_color (cr, &lighter); + gdk_cairo_set_source_rgba (cr, &lighter); add_path_rectangle_sides (cr, x , y, width , height, sides); cairo_stroke (cr); - gdk_cairo_set_source_color (cr, &darker); + gdk_cairo_set_source_rgba (cr, &darker); add_path_rectangle_sides (cr, x, y, width - 1, height - 1, sides); cairo_stroke (cr); if (gap_side == GTK_POS_RIGHT || gap_side == GTK_POS_BOTTOM) { - gdk_cairo_set_source_color (cr, &darker); + gdk_cairo_set_source_rgba (cr, &darker); add_path_gap_side (cr, gap_side, x + 1, y + 1, width - 4, height - 4, xy0_gap, xy1_gap); cairo_stroke (cr); - gdk_cairo_set_source_color (cr, &lighter); + gdk_cairo_set_source_rgba (cr, &lighter); add_path_gap_side (cr, gap_side, x, y, width, height, xy0_gap, xy1_gap); @@ -2043,24 +2040,24 @@ gtk_theming_engine_render_frame_gap (GtkThemingEngine *engine, else sides = SIDE_TOP | SIDE_LEFT; - gdk_cairo_set_source_color (cr, &lighter); + gdk_cairo_set_source_rgba (cr, &lighter); add_path_rectangle_sides (cr, x + 1, y + 1, width - 2, height - 3, sides); cairo_stroke (cr); - gdk_cairo_set_source_color (cr, &darker); + gdk_cairo_set_source_rgba (cr, &darker); add_path_rectangle_sides (cr, x, y, width - 1, height - 1, sides); cairo_stroke (cr); if (gap_side == GTK_POS_LEFT || gap_side == GTK_POS_TOP) { - gdk_cairo_set_source_color (cr, &lighter); + gdk_cairo_set_source_rgba (cr, &lighter); add_path_gap_side (cr, gap_side, x + 1, y + 1, width - 4, height - 4, xy0_gap, xy1_gap); cairo_stroke (cr); - gdk_cairo_set_source_color (cr, &darker); + gdk_cairo_set_source_rgba (cr, &darker); add_path_gap_side (cr, gap_side, x, y, width - 2, height - 2, xy0_gap, xy1_gap); @@ -2076,7 +2073,7 @@ gtk_theming_engine_render_frame_gap (GtkThemingEngine *engine, else sides = SIDE_BOTTOM | SIDE_RIGHT; - gdk_cairo_set_source_color (cr, &darker); + gdk_cairo_set_source_rgba (cr, &darker); add_path_rectangle_sides (cr, x + 1, y, width - 2, height, sides); add_path_rectangle_sides (cr, x, y + 1, width, height - 2, sides); cairo_stroke (cr); @@ -2088,7 +2085,7 @@ gtk_theming_engine_render_frame_gap (GtkThemingEngine *engine, if (gap_side == GTK_POS_RIGHT || gap_side == GTK_POS_BOTTOM) { - gdk_cairo_set_source_color (cr, &darker); + gdk_cairo_set_source_rgba (cr, &darker); add_path_gap_side (cr, gap_side, x, y, width - 2, height - 2, xy0_gap, xy1_gap); @@ -2108,7 +2105,7 @@ gtk_theming_engine_render_frame_gap (GtkThemingEngine *engine, else sides = SIDE_TOP | SIDE_LEFT; - gdk_cairo_set_source_color (cr, &lighter); + gdk_cairo_set_source_rgba (cr, &lighter); add_path_rectangle_sides (cr, x, y, width, height, sides); cairo_stroke (cr); @@ -2124,7 +2121,7 @@ gtk_theming_engine_render_frame_gap (GtkThemingEngine *engine, cairo_restore (cr); - gdk_color_free (bg_color); + gdk_rgba_free (bg_color); } static void @@ -2137,8 +2134,8 @@ gtk_theming_engine_render_extension (GtkThemingEngine *engine, GtkPositionType gap_side) { GtkStateFlags flags; - GdkColor *bg_color; - GdkColor lighter, darker; + GdkRGBA *bg_color; + GdkRGBA lighter, darker; cairo_save (cr); flags = gtk_theming_engine_get_state (engine); @@ -2154,19 +2151,19 @@ gtk_theming_engine_render_extension (GtkThemingEngine *engine, switch (gap_side) { case GTK_POS_TOP: - gdk_cairo_set_source_color (cr, bg_color); + gdk_cairo_set_source_rgba (cr, bg_color); cairo_rectangle (cr, x + 1, y, width - 2, height); cairo_fill (cr); - gdk_cairo_set_source_color (cr, &lighter); + gdk_cairo_set_source_rgba (cr, &lighter); add_path_line (cr, x, y, x, y + height - 2); cairo_stroke (cr); - gdk_cairo_set_source_color (cr, bg_color); + gdk_cairo_set_source_rgba (cr, bg_color); add_path_line (cr, x + 1, y, x + 1, y + height - 2); cairo_stroke (cr); - gdk_cairo_set_source_color (cr, &darker); + gdk_cairo_set_source_rgba (cr, &darker); add_path_line (cr, x + 2, y + height - 2, x + width - 2, y + height - 2); add_path_line (cr, x + width - 2, y, x + width - 2, y + height - 2); cairo_stroke (cr); @@ -2178,21 +2175,21 @@ gtk_theming_engine_render_extension (GtkThemingEngine *engine, break; case GTK_POS_BOTTOM: - gdk_cairo_set_source_color (cr, bg_color); + gdk_cairo_set_source_rgba(cr, bg_color); cairo_rectangle (cr, x + 1, y, width - 2, height); cairo_fill (cr); - gdk_cairo_set_source_color (cr, &lighter); + gdk_cairo_set_source_rgba (cr, &lighter); add_path_line (cr, x + 1, y, x + width - 2, y); add_path_line (cr, x, y + 1, x, y + height - 1); cairo_stroke (cr); - gdk_cairo_set_source_color (cr, bg_color); + gdk_cairo_set_source_rgba (cr, bg_color); add_path_line (cr, x + 1, y + 1, x + width - 2, y + 1); add_path_line (cr, x + 1, y + 1, x + 1, y + height - 1); cairo_stroke (cr); - gdk_cairo_set_source_color (cr, &darker); + gdk_cairo_set_source_rgba (cr, &darker); add_path_line (cr, x + width - 2, y + 2, x + width - 2, y + height - 1); cairo_stroke (cr); @@ -2202,19 +2199,19 @@ gtk_theming_engine_render_extension (GtkThemingEngine *engine, break; case GTK_POS_LEFT: - gdk_cairo_set_source_color (cr, bg_color); + gdk_cairo_set_source_rgba (cr, bg_color); cairo_rectangle (cr, x, y + 1, width, height - 2); cairo_fill (cr); - gdk_cairo_set_source_color (cr, &lighter); + gdk_cairo_set_source_rgba (cr, &lighter); add_path_line (cr, x, y, x + width - 2, y); cairo_stroke (cr); - gdk_cairo_set_source_color (cr, bg_color); + gdk_cairo_set_source_rgba (cr, bg_color); add_path_line (cr, x + 1, y + 1, x + width - 2, y + 1); cairo_stroke (cr); - gdk_cairo_set_source_color (cr, &darker); + gdk_cairo_set_source_rgba (cr, &darker); add_path_line (cr, x, y + height - 2, x + width - 2, y + height - 2); add_path_line (cr, x + width - 2, y + 2, x + width - 2, y + height - 2); cairo_stroke (cr); @@ -2226,21 +2223,21 @@ gtk_theming_engine_render_extension (GtkThemingEngine *engine, break; case GTK_POS_RIGHT: - gdk_cairo_set_source_color (cr, bg_color); + gdk_cairo_set_source_rgba (cr, bg_color); cairo_rectangle (cr, x, y + 1, width, height - 2); cairo_fill (cr); - gdk_cairo_set_source_color (cr, &lighter); + gdk_cairo_set_source_rgba (cr, &lighter); add_path_line (cr, x + 1, y, x + width - 1, y); add_path_line (cr, x, y + 1, x, y + height - 2); cairo_stroke (cr); - gdk_cairo_set_source_color (cr, bg_color); + gdk_cairo_set_source_rgba (cr, bg_color); add_path_line (cr, x + 1, y + 1, x + width - 1, y + 1); add_path_line (cr, x + 1, y + 1, x + 1, y + height - 2); cairo_stroke (cr); - gdk_cairo_set_source_color (cr, &darker); + gdk_cairo_set_source_rgba (cr, &darker); add_path_line (cr, x + 2, y + height - 2, x + width - 1, y + height - 2); cairo_stroke (cr); @@ -2253,34 +2250,34 @@ gtk_theming_engine_render_extension (GtkThemingEngine *engine, cairo_restore (cr); - gdk_color_free (bg_color); + gdk_rgba_free (bg_color); } static void -render_dot (cairo_t *cr, - const GdkColor *lighter, - const GdkColor *darker, - gdouble x, - gdouble y, - gdouble size) +render_dot (cairo_t *cr, + const GdkRGBA *lighter, + const GdkRGBA *darker, + gdouble x, + gdouble y, + gdouble size) { size = CLAMP ((gint) size, 2, 3); if (size == 2) { - gdk_cairo_set_source_color (cr, lighter); + gdk_cairo_set_source_rgba (cr, lighter); cairo_rectangle (cr, x, y, 1, 1); cairo_rectangle (cr, x + 1, y + 1, 1, 1); cairo_fill (cr); } else if (size == 3) { - gdk_cairo_set_source_color (cr, lighter); + gdk_cairo_set_source_rgba (cr, lighter); cairo_rectangle (cr, x, y, 2, 1); cairo_rectangle (cr, x, y, 1, 2); cairo_fill (cr); - gdk_cairo_set_source_color (cr, darker); + gdk_cairo_set_source_rgba (cr, darker); cairo_rectangle (cr, x + 1, y + 1, 2, 1); cairo_rectangle (cr, x + 2, y, 1, 2); cairo_fill (cr); @@ -2296,8 +2293,8 @@ gtk_theming_engine_render_handle (GtkThemingEngine *engine, gdouble height) { GtkStateFlags flags; - GdkColor *bg_color; - GdkColor lighter, darker; + GdkRGBA *bg_color; + GdkRGBA lighter, darker; gint xx, yy; cairo_save (cr); @@ -2311,7 +2308,7 @@ gtk_theming_engine_render_handle (GtkThemingEngine *engine, color_shade (bg_color, 0.7, &darker); color_shade (bg_color, 1.3, &lighter); - gdk_cairo_set_source_color (cr, bg_color); + gdk_cairo_set_source_rgba (cr, bg_color); cairo_rectangle (cr, x, y, width, height); cairo_fill (cr); @@ -2336,5 +2333,5 @@ gtk_theming_engine_render_handle (GtkThemingEngine *engine, cairo_restore (cr); - gdk_color_free (bg_color); + gdk_rgba_free (bg_color); } -- 2.30.2